Micron Document
C.S.Burner 🪙 ━►🔥GIT Node

Node / reticulum_mirror / MeshChatX / files / .github / workflows / android-emulator-smoke.yml

Displaying Raw • Download

.github/workflows/android-emulator-smoke.yml 8db1f550262ba40ef35b4f081dfd893e78dc1658 (8db1f550) Text, 8.93 KB

T8b949e# Nightly / manual Android emulator smoke: build x86_64 debug APK, install on
T8b949e# an AVD, launch MainActivity, and require /api/v1/status to respond (ok or starting).
T8b949e# Catches Chaquopy boot failures (missing modules, storage lock SystemExit, etc.)
T8b949e# that assembleDebug alone cannot see.
T8b949e#
T8b949e# Pinned first-party actions (bump tag and SHA together when upgrading):
T8b949e# actions/checkout@v6.0.1 8e8c483db84b4bee98b60c0593521ed34d9990e8
T8b949e# actions/setup-python@v6.2.0 a309ff8b426b58ec0e2a45f0f869d46889d02405
T8b949e# actions/setup-java@v4.7.1 c5195efecf7bdfc987ee8bae7a71cb8b11521c00
T8b949e# actions/upload-artifact@v5.0.0 330a01c490aca151604b8cf639adc76d48f6c5d4
T8b949e# actions/download-artifact@v5.0.0 634f93cb2916e3fdff6788551b99b062d0335ce0
T8b949e# reactivecircus/android-emulator-runner@v2.38.0
T8b949e# a421e43855164a8197daf9d8d40fe71c6996bb0d

Tff7b72nameTb4b4b4: Ta5d6ffAndroidTa5d6ff Ta5d6ffemulatorTa5d6ff Ta5d6ffsmoke

Tff7b72onTb4b4b4:
Tff7b72scheduleTb4b4b4:
T8b949e# After nightly release tagging window; independent of release success.
Tb4b4b4- Tff7b72cronTb4b4b4: Ta5d6ff"Ta5d6ff30Te6edf3 Ta5d6ff8Te6edf3 Ta5d6ff*Te6edf3 Ta5d6ff*Te6edf3 Ta5d6ff*Ta5d6ff"
Tff7b72workflow_dispatchTb4b4b4:
Tff7b72inputsTb4b4b4:
Tff7b72api_levelTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ffAndroidTa5d6ff Ta5d6ffAPITa5d6ff Ta5d6fflevelTa5d6ff Ta5d6ffforTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffemulatorTa5d6ff Ta5d6ffAVD
Tff7b72requiredTb4b4b4: Ta5d6fftrue
Tff7b72typeTb4b4b4: Ta5d6ffstring
Tff7b72defaultTb4b4b4: Ta5d6ff"Ta5d6ff30Ta5d6ff"

Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72actionsTb4b4b4: Ta5d6ffwrite

Tff7b72concurrencyTb4b4b4:
Tff7b72groupTb4b4b4: Ta5d6ffandroid-emulator-smoke-${{Ta5d6ff Ta5d6ffgithub.refTa5d6ff Ta5d6ff}}
Tff7b72cancel-in-progressTb4b4b4: Ta5d6fftrue

Tff7b72envTb4b4b4:
Tff7b72FORCE_JAVASCRIPT_ACTIONS_TO_NODE24Tb4b4b4: Ta5d6fftrue
Tff7b72NODE_OPTIONSTb4b4b4: Ta5d6ff--max-old-space-size=8192
Tff7b72NODE_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff24Ta5d6ff"
Tff7b72PNPM_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff11.1.2Ta5d6ff"
Tff7b72PYTHON_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff3.11Ta5d6ff"
Tff7b72JAVA_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff17Ta5d6ff"
Tff7b72CHAQUOPY_REFTb4b4b4: Ta5d6ff"Ta5d6ff9f563f45108a873d7feb363e1f754c0173f1114eTa5d6ff"
Tff7b72MESHCHATX_ABISTb4b4b4: Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"

Tff7b72jobsTb4b4b4:
Tff7b72frontendTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifact
Tff7b72usesTb4b4b4: Ta5d6ff./.github/workflows/frontend-build.yml
Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72withTb4b4b4:
Tff7b72artifact_nameTb4b4b4: Ta5d6ffmeshchatx-frontend-android-smoke-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_attemptTa5d6ff Ta5d6ff}}
Tff7b72retention_daysTb4b4b4: Ta5d6ff1
Tff7b72python_versionTb4b4b4: Ta5d6ff"Ta5d6ff3.11Ta5d6ff"

Tff7b72smokeTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffEmulatorTa5d6ff Ta5d6ffsmokeTa5d6ff Ta5d6ff(APITa5d6ff Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event.inputs.api_levelTa5d6ff Ta5d6ff||Ta5d6ff Ta5d6ff'30'Ta5d6ff Ta5d6ff}})
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-latest
Tff7b72needsTb4b4b4: Ta5d6fffrontend
Tff7b72timeout-minutesTb4b4b4: Ta5d6ff120
Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72actionsTb4b4b4: Ta5d6ffwrite
Tff7b72defaultsTb4b4b4:
Tff7b72runTb4b4b4:
Tff7b72shellTb4b4b4: Ta5d6ffbash
Tff7b72envTb4b4b4:
Tff7b72FRONTEND_ARTIFACT_NAMETb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffneeds.frontend.outputs.artifact_nameTa5d6ff Ta5d6ff}}
Tff7b72API_LEVELTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event.inputs.api_levelTa5d6ff Ta5d6ff||Ta5d6ff Ta5d6ff'30'Ta5d6ff Ta5d6ff}}
Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckout
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffEnableTa5d6ff Ta5d6ffKVM
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
Tff7b72sudo udevadm control --reload-rules
Tff7b72sudo udevadm trigger --name-match=kvm
Tff7b72ls -l /dev/kvm

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetTa5d6ff Ta5d6ffupTa5d6ff Ta5d6ffJava
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00
Tff7b72withTb4b4b4:
Tff7b72distributionTb4b4b4: Ta5d6fftemurin
Tff7b72java-versionTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.JAVA_VERSIONTa5d6ff Ta5d6ff}}
Tff7b72cacheTb4b4b4: Ta5d6ffgradle
Tff7b72cache-dependency-pathTb4b4b4: Tb4b4b4|
Tff7b72android/build.gradle
Tff7b72android/settings.gradle
Tff7b72android/app/build.gradle

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetTa5d6ff Ta5d6ffupTa5d6ff Ta5d6ffPython
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
Tff7b72withTb4b4b4:
Tff7b72python-versionTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.PYTHON_VERSIONTa5d6ff Ta5d6ff}}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDownloadTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifact
Tff7b72usesTb4b4b4: Ta5d6ff./.github/actions/fetch-frontend-artifact
Tff7b72withTb4b4b4:
Tff7b72artifact-nameTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.FRONTEND_ARTIFACT_NAMETa5d6ff Ta5d6ff}}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ffdependencies
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72sudo apt-get update
Tff7b72sudo apt-get install -y build-essential cmake pkg-config patchelf

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffRustTa5d6ff Ta5d6fftoolchain
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72curl -sSfL https://sh.rustup.rs -o rustup-init.sh
Tff7b72chmod +x rustup-init.sh
Tff7b72./rustup-init.sh -y --profile minimal --default-toolchain stable
Tff7b72echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffNDKTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffChaquopyTa5d6ff Ta5d6ffnativeTa5d6ff Ta5d6ffwheels
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-/usr/local/lib/android/sdk}}"
Tff7b72SDKMANAGER="${SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager"
Tff7b72if [[ ! -x "${SDKMANAGER}" ]]; then
Tff7b72echo "Expected preinstalled sdkmanager at ${SDKMANAGER}" >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72NDK_VERSION="27.3.13750724"
Tff7b72yes_n() { for _ in $(seq 1 "$1"); do echo y; done; }
Tff7b72if [[ ! -d "${SDK_ROOT}/ndk/${NDK_VERSION}" ]]; then
Tff7b72yes_n 200 | "${SDKMANAGER}" --sdk_root="${SDK_ROOT}" --licenses >/dev/null
Tff7b72yes_n 50 | "${SDKMANAGER}" --sdk_root="${SDK_ROOT}" "ndk;${NDK_VERSION}" >/dev/null
Tff7b72fi
Tff7b72{
Tff7b72echo "ANDROID_HOME=${SDK_ROOT}"
Tff7b72echo "ANDROID_SDK_ROOT=${SDK_ROOT}"
Tff7b72} >> "${GITHUB_ENV}"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheelsTa5d6ff Ta5d6ff(x86_64Ta5d6ff Ta5d6ffonly)
Tff7b72runTb4b4b4: Ta5d6ffbashTa5d6ff Ta5d6ffscripts/build-android-wheels-local.shTa5d6ff Ta5d6ff--python-minorTa5d6ff Ta5d6ff"${PYTHON_VERSION}"Ta5d6ff Ta5d6ff--chaquopy-refTa5d6ff Ta5d6ff"${CHAQUOPY_REF}"Ta5d6ff Ta5d6ff--abisTa5d6ff Ta5d6ffx86_64

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffMeshChatXTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffrepositoryTa5d6ff Ta5d6ffbundle
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72python -m pip install -U pip build
Tff7b72python -m build --wheel -o dist .

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffVerifyTa5d6ff Ta5d6ffrequiredTa5d6ff Ta5d6ffx86_64Ta5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheels
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72required=(
Tff7b72"cbor2-5.6.5-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"aiohttp-3.14.1-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"cryptography-49.0.0-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"chaquopy_libcodec2-*-android_24_x86_64.whl"
Tff7b72"lxst-*-py3-none-any.whl"
Tff7b72"bleak-*-py3-none-any.whl"
Tff7b72)
Tff7b72missing=0
Tff7b72for pattern in "${required[@]}"; do
Tff7b72if ! ls android/vendor/${pattern} >/dev/null 2>&1; then
Tff7b72echo "::error::Missing wheel matching android/vendor/${pattern}"
Tff7b72missing=1
Tff7b72fi
Tff7b72done
Tff7b72if [[ "${missing}" -ne 0 ]]; then
Tff7b72ls -la android/vendor/ || true
Tff7b72exit 1
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffx86_64Ta5d6ff Ta5d6ffdebugTa5d6ff Ta5d6ffAPK
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72envTb4b4b4:
Tff7b72MESHCHATX_ABISTb4b4b4: Ta5d6ffx86_64
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon -PmeshchatxAbis=x86_64 :app:assembleDebug

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffsmokeTa5d6ff Ta5d6ffAPK
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-smoke-apk-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/app/build/outputs/apk/debug/*.apk
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror
Tff7b72retention-daysTb4b4b4: Ta5d6ff7

T8b949e# android-emulator-runner runs each script line via `sh -c` (dash on
T8b949e# Ubuntu). Keep this a single POSIX line and put bashisms in the
T8b949e# smoke script (shebang + set -euo pipefail).
T8b949e#
T8b949e# The action itself also invokes `sh -c` internally with bash-only
T8b949e# options (`set -euo pipefail`), which fails on runners where /bin/sh
T8b949e# is dash. Force /bin/sh to bash for the duration of this job.
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUseTa5d6ff Ta5d6ffbashTa5d6ff Ta5d6ffasTa5d6ff Ta5d6ff/bin/shTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffemulatorTa5d6ff Ta5d6ffrunner
Tff7b72runTb4b4b4: Ta5d6ffsudoTa5d6ff Ta5d6fflnTa5d6ff Ta5d6ff-sfTa5d6ff Ta5d6ff/bin/bashTa5d6ff Ta5d6ff/bin/sh

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffemulatorTa5d6ff Ta5d6ffsmoke
Tff7b72usesTb4b4b4: Ta5d6ffreactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d T8b949e# v2.38.0
Tff7b72withTb4b4b4:
Tff7b72api-levelTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.API_LEVELTa5d6ff Ta5d6ff}}
Tff7b72targetTb4b4b4: Ta5d6ffgoogle_apis
Tff7b72archTb4b4b4: Ta5d6ffx86_64
Tff7b72profileTb4b4b4: Ta5d6ffpixel_5
Tff7b72force-avd-creationTb4b4b4: Ta5d6fffalse
Tff7b72emulator-optionsTb4b4b4: Ta5d6ff-no-windowTa5d6ff Ta5d6ff-gpuTa5d6ff Ta5d6ffswiftshader_indirectTa5d6ff Ta5d6ff-noaudioTa5d6ff Ta5d6ff-no-boot-animTa5d6ff Ta5d6ff-camera-backTa5d6ff Ta5d6ffnone
Tff7b72disable-animationsTb4b4b4: Ta5d6fftrue
Tff7b72scriptTb4b4b4: Ta5d6ffMESHCHATX_SMOKE_TIMEOUT_SEC=180Ta5d6ff Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/android-emulator-smoke.shTa5d6ff Ta5d6ff"$(lsTa5d6ff Ta5d6ff-1Ta5d6ff Ta5d6ffandroid/app/build/outputs/apk/debug/*.apkTa5d6ff Ta5d6ff|Ta5d6ff Ta5d6ffheadTa5d6ff Ta5d6ff-nTa5d6ff Ta5d6ff1)"

Served by rngit 1.5.2 - Generated in 0.02s